#ifndef QLSPLUGINSMANAGERPOOL_H
#define QLSPLUGINSMANAGERPOOL_H

#include <QObject>
#include <QMutex>

#include "dllQLsPluginsManager_global.h"
#include "qlspluginsmanager.h"

/**
 * @brief The QLsPluginsManagerPool class：插件管理器连接池
 * 根据插件路径划分插件管理器
 * 主要接口：
 *	1. QLsPluginsManager *GetPluginsManagerByPluginsDir(const QString &pluginsDir);
 *		在现有插件管理器中匹配插件路径，如果没有，则创建新的插件管理器进入连接池，并返回该插件管理器
 *	2. QList<QLsPluginsManager *> getPluginsManagerList() const;
 *		当前存在的 插件管理器 列表
 */
class DLLQLSPLUGINSMANAGER_EXPORT QLsPluginsManagerPool : public QObject
{
	Q_OBJECT
public:
	explicit QLsPluginsManagerPool(QObject *parent = nullptr);

	/* 唯一实例 */
	static QLsPluginsManagerPool &GetInstance();

	/* 当前存在的 插件管理器 列表 */
	QList<QLsPluginsManager *> getPluginsManagerList() const;

	/* 获取插件管理器 */
	QLsPluginsManager *GetPluginsManagerByPluginsDir(const QString &pluginsDir);

	/* 销毁插件管理器 */
	void DestroyPluginsManager(QLsPluginsManager *pluginsManager);

private:
	QList<QLsPluginsManager *> m_pluginsManagerList;			/* 当前存在的 插件管理器 列表 */

	/* instance */
	static QMutex m_instanceMutex;
	static QLsPluginsManagerPool *m_instance;
};

#endif // QLSPLUGINSMANAGERPOOL_H
